package modeles;

public class Data {
	
	/**
	 * 1ere permutation bloc de 64 bits. Le 58�me bit -> 1er, le 50�me -> 2eme, etc.
	 */
	private static int[] IPTable=
		{58,50,42,34,26,18,10,2,
		60, 52, 44 ,36, 28, 20, 12 ,4,
		62 ,54 ,46 ,38 ,30 ,22 ,14 ,6,
		64 ,56, 48, 40, 32, 24 ,16, 8,
		57 ,49 ,41 ,33 ,25 ,17 ,9 ,1,
		59 ,51, 43 ,35 ,27 ,19 ,11, 3,
		61 ,53 ,45, 37, 29 ,21 ,13 ,5,
		63 ,55 ,47 ,39 ,31 ,23, 15, 7};

	/**
	 * permutation inverse de l'initiale
	 */
	private static int[] IP_1Table=
		{40, 8 ,48, 16, 56, 24, 64, 32,
		39, 7, 47, 15, 55 ,23, 63, 31,
		38 ,6 ,46 ,14, 54, 22 ,62, 30,
		37 ,5 ,45, 13, 53 ,21, 61, 29,
		36 ,4 ,44 ,12 ,52 ,20 ,60 ,28,
		35 ,3 ,43 ,11, 51, 19 ,59 ,27,
		34 ,2 ,42, 10 ,50, 18 ,58, 26,
		33, 1 ,41, 9 ,49, 17, 57, 25};
	
	/**
	 * Expansion sert � avoir 48 bits � partir de 32, en dupliquant deux bits sur quatre.
	 * Utilis� � l'entr�e du r�seau de Feistel. 
	 */
	private static int [] ExpansionTable= 
		{32, 1, 2, 3, 4, 5,
	    4 ,5 ,6 ,7 ,8 ,9,
	    8 ,9 ,10 ,11 ,12 ,13,
	    12 ,13 ,14 ,15 ,16 ,17,
	    16, 17, 18, 19, 20, 21,
	    20, 21, 22, 23, 24, 25,
	    24, 25, 26, 27, 28, 29,
	    28, 29, 30, 31, 32, 1};
	
	/**
	 * Utilis� a la sortie du r�seau de Feistel
	 */
	private static int [] PermutationTable= 
		{16, 7, 20, 21,
	    29, 12, 28, 17,
	    1, 15, 23, 26,
	    5, 18, 31, 10,
	    2, 8, 24, 14,
	    32, 27, 3, 9,
	    19, 13, 30, 6,
	    22, 11, 4, 25};
	
	/**
	 * PC1 et PC2 servent a creer les 16 sous-cles de 48 bits
	 * Utilisees dans le reseau de Feistel.
	 */
	private static int[] PC_1Table=
			//gauche
		{57 ,49 ,41 ,33 ,25 ,17 ,9,
	    1, 58, 50, 42, 34, 26, 18,
	    10, 2,59, 51, 43, 35, 27,
	    19, 11, 3, 60, 52, 44, 36,
	    	//droite
	    63, 55, 47, 39, 31, 23, 15,
	    7, 62, 54, 46, 38, 30, 22,
	    14, 6, 61, 53, 45, 37, 29,
	    21, 13, 5 ,28, 20, 12, 4};
	
	/**
	 * PC1 et PC2 servent a creer les 16 sous-cles de 48 bits 
	 * Utilisees dans le reseau de Feistel.
	 */
	private static int[] PC_2Table=
		{14, 17, 11, 24, 1, 5,
	    3, 28, 15, 6, 21, 10,
	    23, 19, 12, 4,26, 8,
	    16, 7, 27, 20, 13, 2,
	    41, 52, 31, 37, 47, 55,
	    30, 40, 51, 45, 33, 48,
	    44, 49, 39, 56, 34, 53,
	    46, 42, 50, 36, 29, 32};
	
	/**
	 * Les 8 Bo�tes S du DES. 
	 * Elles prennent 6 bits en entr�e et en sortent 4. 
	 * Utilis�es dans le r�seau de Feistel.
	 */
	private static int [][] sbox1=
	    {{14 ,4 ,13 ,1 ,2 ,15 ,11 ,8 ,3 ,10 ,6 ,12 ,5 ,9 ,0 ,7},
	     {0 ,15 ,7 ,4 ,14 ,2 ,13 ,1 ,10 ,6 ,12 ,11 ,9 ,5 ,3 ,8},
	     {4 ,1 ,14 ,8 ,13 ,6 ,2 ,11 ,15 ,12 ,9 ,7 ,3 ,10 ,5 ,0},
	     {15, 12, 8, 2, 4, 9, 1, 7 ,5, 11, 3, 14, 10, 0, 6, 13}};
	    
	private static int [][] sbox2=
	    {{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12 ,0, 5, 1},
	     {3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9 ,11, 5},
	     {0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15},
	     {13 ,8 ,10 ,1 ,3 ,15 ,4 ,2 ,11 ,6 ,7 ,12 ,0 ,5 ,14 ,9}};
	    
	private static int [][] sbox3=
		{{10 ,0 ,9 ,14 ,6 ,3 ,15 ,5 ,1 ,13 ,12 ,7 ,11 ,4 ,2 ,8},
	    {13, 7, 0, 9, 3, 4, 6, 10, 2 ,8 ,5 ,14, 12, 11, 15, 1},
	    {13, 6, 4, 9, 8 ,15 ,3 ,0, 11, 1, 2, 12, 5, 10, 14, 7},
	    {1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}};
	    
	
	private static int [][] sbox4=
	    {{7 ,13 ,14 ,3 ,0 ,6 ,9 ,10 ,1 ,2 ,8 ,5 ,11 ,12 ,4 ,15},
	    {13 ,8 ,11 ,5, 6 ,15, 0 ,3 ,4 ,7 ,2 ,12 ,1 ,10 ,14 ,9},
	    {10, 6, 9, 0, 12, 11, 7 ,13, 15, 1, 3, 14, 5, 2, 8, 4},
	    {3, 15, 0, 6, 10, 1, 13, 8, 9, 4 ,5 ,11 ,12, 7, 2, 14}};
	    
	private static int [][] sbox5=
		{{2 ,12 ,4 ,1 ,7 ,10 ,11 ,6 ,8 ,5 ,3 ,15 ,13 ,0 ,14 ,9},
	    {14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3 ,9 ,8 ,6},
	    {4 ,2, 1, 11, 10, 13, 7 ,8 ,15, 9, 12, 5, 6, 3, 0, 14},
	    {11, 8, 12 ,7, 1, 14 ,2 ,13 ,6 ,15, 0 ,9, 10, 4, 5, 3}};
	    
	private static int [][] sbox6=
		{{12 ,1 ,10 ,15, 9 ,2, 6 ,8 ,0 ,13 ,3 ,4 ,14 ,7 ,5 ,11},
	    {10, 15, 4 ,2 ,7 ,12 ,9, 5, 6, 1, 13 ,14 ,0, 11, 3 ,8},
	    {9, 14, 15, 5, 2 ,8 ,12, 3, 7 ,0 ,4 ,10, 1, 13 ,11 ,6},
	    {4, 3, 2, 12, 9, 5, 15 ,10 ,11, 14, 1, 7, 6, 0, 8, 13}};
	    
	private static int [][] sbox7=
		{{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7 ,5 ,10 ,6 ,1},
	    {13, 0, 11, 7, 4, 9, 1, 10, 14 ,3 ,5, 12, 2, 15, 8, 6},
	    {1, 4, 11, 13, 12, 3, 7 ,14, 10, 15, 6, 8, 0, 5, 9, 2},
	    {6, 11, 13, 8 ,1 ,4, 10, 7, 9, 5 ,0 ,15 ,14, 2, 3, 12}};
	    
	private static int [][] sbox8=
    	{{13, 2, 8, 4, 6, 15, 11, 1 ,10, 9, 3, 14, 5, 0, 12, 7},
	    {1, 15, 13, 8 ,10, 3 ,7 ,4 ,12, 5, 6 ,11, 0, 14, 9, 2},
	    {7, 11, 4, 1 ,9 ,12 ,14 ,2 ,0 ,6 ,10, 13 ,15 ,3 ,5 ,8},
	    {2, 1, 14, 7 ,4 ,10, 8 ,13, 15, 12, 9, 0, 3, 5, 6, 11}};
	
	private static int[]left_shift= {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};
	
	public static int[] getIPTable() {
		return IPTable;
	}

	public static int[] getIP_1Table() {
		return IP_1Table;
	}

	public static int[] getExpansionTable() {
		return ExpansionTable;
	}

	public static int[] getPermutationTable() {
		return PermutationTable;
	}

	public static int[] getPC_1Table() {
		return PC_1Table;
	}

	public static int[] getPC_2Table() {
		return PC_2Table;
	}

	public static int[][] getSbox1() {
		return sbox1;
	}

	public static int[][] getSbox2() {
		return sbox2;
	}

	public static int[][] getSbox3() {
		return sbox3;
	}

	public static int[][] getSbox4() {
		return sbox4;
	}

	public static int[][] getSbox5() {
		return sbox5;
	}

	public static int[][] getSbox6() {
		return sbox6;
	}

	public static int[][] getSbox7() {
		return sbox7;
	}

	public static int[][] getSbox8() {
		return sbox8;
	}

	public static int[] getLeft_shift() {
		return left_shift;
	}

}
